import { app, BrowserWindow, ipcMain } from 'electron';
// import EventEmitter from 'events';
import { getEmitter } from "@/event";
import { logger } from '@/settings';

// const pubSub = new EventEmitter();
const pubSub = getEmitter();


/**状态同步器通讯 */
export function stateManagerIpc() {

    // 监听来自渲染进程的 "subscribe" 消息
    ipcMain.on('subscribe', (event, eventName) => {
        // 定义事件监听器，将事件数据发送回订阅了此事件的渲染进程
        const listener = (data) => {
            logger.debug('将数据发送给订阅了时间的其他渲染进程中。')
            event.sender.send(eventName, data);
        };

        // 当收到 "subscribe" 消息时，将当前渲染进程添加到订阅者列表中
        pubSub.on(eventName, listener);

        // 当窗口关闭时，移除事件监听器，sender表示发送消息的 webContents 
        event.sender.once('destroyed', () => {
            logger.debug('窗口关闭，监听器移除')
            pubSub.off(eventName, listener);
        });
    });

    // 监听来自渲染进程的 "publish" 消息
    // 渲染进程通过主进程的该方法 将 data 发布给其他订阅了 eventName 事件的渲染进程
    ipcMain.on('publish', (event, eventName, data) => {
        // 当收到 "publish" 消息时，将数据广播给订阅了此事件的所有渲染进程
        pubSub.emit(eventName, data);
    });
}









